package futbol.tacticas.concursantes.TacticaXWCA;

/**
 * Archivo   : TacticaXWCA
 * Fecha de Creacion : 05/06/2008, 03:15:53 AM
 * @author William Candelo Aguirre - xwca
*/
import futbol.tacticas.concursantes.Tactica;
import futbol.tacticas.Comando;
import futbol.tacticas.ComandoIrA;
import futbol.tacticas.ComandoPase;
import futbol.tacticas.ComandoTiroAPuerta;
import futbol.tacticas.SituacionJugadores;
import java.util.Vector;
import java.awt.Point;
import java.awt.Color;
       
public class TacticaXWCA implements Tactica {
   
   private Vector<Comando> comandos = new Vector();
   private SituacionJugadores sj;
   private Color color1 = Color.ORANGE;
   private Color color2 = Color.BLUE;
   private Color colorNumero = Color.WHITE;
   private String nombre_equipo = "DBuenaventura";
   
   int jugadorMasCercaALaBola = 10;
   
   private int nValores[][]={
       {-155,3,10}, //[1] 
       {-100,-15,10}, //[2]
       {-88,-0,10}, //[3]
       {-100,15,10}, //[4]
       {-25,-70,4}, //[5]
       {0,-47,10}, //[6]
       {-70,0,1}, //[7]
       {0,47,10}, //[8]
       {-25,70,4}, //[9]
       {105,-35,10}, //[10]
       {105,35,10}  //[11]
   };

   public TacticaXWCA() { } //constructor
   
   public String getNombre() { return nombre_equipo; } //getNombre ** Nombre del Equipo
   public Color getColor1() { return color1; } //getColor1 ** Color camiseta
   public Color getColor2() { return color2; } //getColor2 ** Color Pantalon
   public Color getColorNumero() { return colorNumero; } //getColorNumero ** Numero de la Camiseta
   public int getXInicial(int n) { return nValores[n][0]; } //getXInicial
   public int getYInicial(int n) { return nValores[n][1]; } //getYInicial
   public int getFuerza(int n) { return nValores[n][2]; } //getFuerza
   
   public Vector<Comando> getComandos(SituacionJugadores sj) {
       this.sj = sj;
       comandos.clear();
       jugadorMasCercaALaBola = sj.getMasCercanoDeBola();
       if(jugadorMasCercaALaBola==1 || jugadorMasCercaALaBola ==2 || jugadorMasCercaALaBola==3
               || jugadorMasCercaALaBola==9 || jugadorMasCercaALaBola==10) {
           comandos.add(new ComandoIrA(jugadorMasCercaALaBola, getBalonX(), getBalonY()));
           comandos.add(new ComandoTiroAPuerta(jugadorMasCercaALaBola, 0));
       } //goleadores patean

       getTactica01Ptro(); 
       getTactica02Dlbro();
       getTactica02Tresls();
       getTactica01Dltrs();
       getTactica01Golltr();
       getTactica02Golrs();

       return comandos;
   } //getComandos

   public void getTactica01Ptro() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();
       
       int y_portero=(int)(balon_y/2); //punto Y de la bola
       if(y_portero<-30)y_portero=-30;
       if(y_portero>30)y_portero=30;
       
       comandos.add(new ComandoIrA(0, nValores[0][0], y_portero));
       if(balon_x < -90) { //Movimiento horizontal
           comandos.add(new ComandoIrA(0, balon_x, balon_y)); //va por el balon
           if(balon_y > -1) {
               comandos.add(new ComandoTiroAPuerta(0, 110));
           } else {
               comandos.add(new ComandoTiroAPuerta(0, -110));
           }
       } else {
           comandos.add(new ComandoIrA(0, nValores[0][0], y_portero)); //vuelve a la porteria
       }
       
       comandos.add(new ComandoTiroAPuerta(0, 110));
   } //getTactica01Ptro
   

   public void getTactica02Dlbro() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();
       
       int x_libero=balon_x+0;
       int y_libero=balon_y+0;
       //determino limite X del jugador
       if(balon_x > -70) {
           x_libero = -70;
           comandos.add(new ComandoIrA(6, x_libero, y_libero));
       } else comandos.add(new ComandoIrA(6, x_libero, y_libero));
       //determino limite Y del jugador
       if(balon_y < -70 ) y_libero=-70;
       else if(balon_y > 70) y_libero=70;
       else comandos.add(new ComandoIrA(6, x_libero, y_libero));
       
       comandos.add(new ComandoIrA(6, x_libero, y_libero)); 
       comandos.add(new ComandoPase(6, 0));
   } //getTactica02Dlbro
   
   public void getTactica02Tresls() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();
       
       int y_defensa=(int)(balon.getY()/2); //punto Y de la bola
       if(y_defensa<-35)y_defensa=-35;
       if(y_defensa>35)y_defensa=35;
       
       int x_defensa=(int)(balon.getX()/2); //punto X de la bola
       if(x_defensa<-50)x_defensa=-50;
       if(x_defensa>50)x_defensa=50;
       
       comandos.add(new ComandoIrA(1, x_defensa, nValores[1][1]+y_defensa));
       comandos.add(new ComandoIrA(2, x_defensa, nValores[2][1]+y_defensa));
       comandos.add(new ComandoIrA(3, x_defensa, nValores[3][1]+y_defensa));
       
       if(jugadorMasCercaALaBola == 1) {
           comandos.add(new ComandoIrA(1, balon_x, balon_y));
           comandos.add(new ComandoTiroAPuerta(1, 0));
       } else if(jugadorMasCercaALaBola == 2) {
           comandos.add(new ComandoIrA(2, balon_x, balon_y));
           comandos.add(new ComandoTiroAPuerta(2, 0));
       } else if(jugadorMasCercaALaBola == 3) {
           comandos.add(new ComandoIrA(3, balon_x, balon_y));
           comandos.add(new ComandoTiroAPuerta(3, 0));
       } else {  }
   } //getTactica02Tresls

   public void getTactica01Dltrs() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();
       //X - Y del defensa libero de arriba. = 4
       int x_dlARR=balon_x+0;
       int y_dlARR=balon_y+0;
       
       //X - Y del defensa libero de abajo. = 8
       int x_dlABA=balon_x+0;
       int y_dlABA=balon_y+0;
       
       //MOVIMIENTOS DEL JUGADOR DE ARRIBA.
       //determino limite X del jugador
       if(balon_x > 0) x_dlARR = 0;
       else comandos.add(new ComandoIrA(4, x_dlARR, y_dlARR));
       //determino limite Y del jugador
       if(balon_y > -15) y_dlARR=-15;
       else comandos.add(new ComandoIrA(4, x_dlARR, y_dlARR));
       
       comandos.add(new ComandoIrA(4, x_dlARR, y_dlARR)); 
       comandos.add(new ComandoTiroAPuerta(4, -100));        
       
       //MOVIMIENTOS DEL JUGADOR DE ABAJO.
       //determino limite X del jugador
       if(balon_x > 0) x_dlABA = 0;
       else comandos.add(new ComandoIrA(8, x_dlABA, y_dlABA));
       //determino limite Y del jugador
       if(balon_y < 15) y_dlABA=15;
       else comandos.add(new ComandoIrA(8, x_dlABA, y_dlABA));
       
       comandos.add(new ComandoIrA(8, x_dlABA, y_dlABA)); 
       comandos.add(new ComandoTiroAPuerta(8, 100));        
   } //getTactica01Dltrs
   
   public void getTactica01Golltr() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();

       int x_dlARR=balon_x+0;
       int y_dlARR=balon_y+0;
       
       int x_dlABA=balon_x+0;
       int y_dlABA=balon_y+0;
       
       if(balon_x < 0) x_dlARR = 0;
       else comandos.add(new ComandoIrA(5, x_dlARR, y_dlARR));
       if(balon_y > -10) y_dlARR=-10;
       else comandos.add(new ComandoIrA(5, x_dlARR, y_dlARR));
       
       comandos.add(new ComandoIrA(5, x_dlARR, y_dlARR)); 
       comandos.add(new ComandoTiroAPuerta(5, 0));        
       
       if(balon_x < 0) x_dlABA = 0;
       else comandos.add(new ComandoIrA(7, x_dlABA, y_dlABA));

       if(balon_y < 10) y_dlABA=10;
       else comandos.add(new ComandoIrA(7, x_dlABA, y_dlABA));
       
       comandos.add(new ComandoIrA(7, x_dlABA, y_dlABA)); 
       comandos.add(new ComandoTiroAPuerta(7, 0));        
   } //getTactica01Golltr
   
   public void getTactica02Golrs() {
       Point balon = sj.getBola();
       int balon_x = (int)balon.getX();
       int balon_y = (int)balon.getY();
       
       int y_delantero=(int)(balon.getY()/2); //punto Y de la bola
       if(y_delantero<-120)y_delantero=-70;
       if(y_delantero>120)y_delantero=70;

       int x_delantero=(int)(balon.getX()/2); //punto X de la bola
       if(x_delantero<120)x_delantero=105;
       if(x_delantero>70)x_delantero=105;
       
       if(balon_x > 35 | balon_x < 90) {
           comandos.add(new ComandoIrA(9, nValores[9][0]-10, nValores[9][1]+y_delantero));
           comandos.add(new ComandoIrA(10, nValores[10][0]-10, nValores[10][1]+y_delantero));
       } else {
           comandos.add(new ComandoIrA(9, nValores[9][0], nValores[9][1]+y_delantero));
           comandos.add(new ComandoIrA(10, nValores[10][0], nValores[10][1]+y_delantero));
       }
           
       if(jugadorMasCercaALaBola == 9) {
           comandos.add(new ComandoIrA(9, balon_x, balon_y));
           comandos.add(new ComandoTiroAPuerta(9, 0));
       } else if(jugadorMasCercaALaBola == 10) {
           comandos.add(new ComandoIrA(10, balon_x, balon_y));
           comandos.add(new ComandoTiroAPuerta(10, 0));
       } else {  }
   } //getTactica02Golrs
  
   private int getBalonX() {
       Point balon = sj.getBola();
       return (int)balon.getX();
   } //getBalonX
   
   private int getBalonY() {
       Point balon = sj.getBola();
       return (int)balon.getY();
   } //getBalonY
   
} //clase
